// 给你一个整数数组 nums 和一个整数 k ，请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
// 示例 1:
// 输入: nums = [1,1,1,2,2,3], k = 2
// 输出: [1,2]
// 示例 2:
// 输入: nums = [1], k = 1

#include <vector>
#include <unordered_map>
#include <queue>
using namespace std;

class Solution {
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {
        // 统计频率
        unordered_map<int,int> freqMap;
        for(int num : nums){
            freqMap[num]++;
        }
        
        // 小顶堆，存储 pair<频率, 值>
        priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
        
        for(auto& [num, freq] : freqMap){
            pq.push({freq, num});  // 频率作为第一个元素用于比较
            if(pq.size() > k){
                pq.pop();  // 弹出频率最小的
            }
        }
        
        vector<int> ans;
        while(!pq.empty()){
            ans.push_back(pq.top().second);  // 取值，不是频率
            pq.pop();
        }
        
        return ans;
    }
};

/*
关键修复点：
1. 添加必要的头文件
2. 将 pair 改为 {freq, num} 格式，频率作为比较关键字
3. 结果中取 pq.top().second（值）而不是 .first（频率）
4. 使用结构化绑定让代码更清晰
*/